﻿using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

namespace demo2{
	/**
	 * 派生物体的实际流程为：

	* 注册一个包含NetworkIdentity组件的预设体
	* 在服务器上创建出该物体
	* 调用游戏代码为物体设置初始值（三维物体上的物理力不会马上生效）
	* 调用NetworkServer.Spawn()方法
	* 服务器上这个物体的NetworkBehaviour组件里的所有同步变量（SyncVars）的值被收集并序列化
	* 包含同步变量数据的MsgType.ObjectSpawn类型的网络消息被发送给所有的客户端
	* 服务上调用OnStartServer()函数，并把isServer设置为true
	* 客户端接收ObjectSpawn消息，并从注册的预设体中创建游戏物体
	* 在创建的物体上应用接收到的同步变量值
	* 每个客户端执行OnStartClient()函数，isClient变量设置为True
	* 在游戏进行过程中，同步变量的值的修改都会被自动同步到所有的客户端，直到游戏结束
	* 服务器上调用NetworkServer.Destroy()
	* 给所有的客户端发送MsgType.ObjectDestroy类型的消息
	* 所有的客户端执行OnNetworkDestroy方法，实例被销毁
	 * 
	 */
	public class SphereA : NetworkBehaviour {


		//当服务器spawn一个网络物体时,网络物体调用OnStartServer,分配netID.并注册到相应服务器上的的NetworkScene的网络物体列表中，更新如isServer为true等信息
		public override void OnStartServer(){
			Debug.LogError (gameObject.name +" netId :"+this.netId+" OnStartServer1...\n"+outlog);


		}

		public override void PreStartClient(){
			Debug.LogError (gameObject.name +" PreStartClient...\n"+outlog);
		}
		public override void OnStartClient(){
			Debug.LogError (gameObject.name +" OnStartClient...\n"+outlog);
		}

		void Start () {
			Debug.LogError (gameObject.name +" Start...");

			Invoke ("CmdSphere",5);

		}
		public override void OnStopAuthority(){
			Debug.LogError (gameObject.name +" OnStopAuthority...\n"+outlog);
		}
		public override void OnStartAuthority(){
			Debug.LogError (gameObject.name +" OnStartAuthority...\n"+outlog);
		}
		//OnStartLocalPlayer玩家物体别初始化才调用，并且将isLocalPlayer设置为 true;
		public override void OnStartLocalPlayer(){
			Debug.LogError (gameObject.name +" OnStartLocalPlayer...\n"+outlog);
		}




		public override void OnNetworkDestroy(){
			Debug.LogError (gameObject.name +" OnNetworkDestroy...\n"+outlog);
		}
			
		string outlog{
			get{
				return string.Format ("isClient:{0}\nisServer:{1} \nisLocalPlayer:{2} \nlocalPlayerAuthority:{3} \nhasAuthority:{4}", isClient, isServer, isLocalPlayer, localPlayerAuthority, hasAuthority);
			}
		}


		[Command]
		void CmdSphere(){
			Debug.LogError ("cmd 我是个球");
			RpcSphere ();
		}
		[ClientRpc]
		void RpcSphere(){
			Debug.LogError ("Rpc 我是个球");
		}
	}
}
